﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Collections;
using DAO;
using DTO;

namespace BUS
{
    public class CHOADONBUS
    {
        //public static CHOADONDTO LayThongTinHoaDon(int MaHoaDon)
        //{
        //    CHOADONDTO hoadonDto = new CHOADONDTO();
        //    hoadonDto = CHOADONDAO.LayThongTinHoaDon(MaHoaDon);
        //    return hoadonDto;
        //}
        //public static List<CHOADONDTO> LayDanhSachHoaDon()
        //{
        //    List<CHOADONDTO> ds = new List<CHOADONDTO>();
        //    CHOADONDAO lndDao = new CHOADONDAO();
        //    ds = CHOADONDAO.LayDanhSachHoaDon();
        //    return ds;
        //}
        //public static List<CHOADONDTO> LayDanhSachHoaDonDaDanhDauXoa()
        //{
        //    List<CHOADONDTO> ds = new List<CHOADONDTO>();
        //    CHOADONDAO lndDao = new CHOADONDAO();
        //    ds = CHOADONDAO.LayDanhSachHoaDonDaDanhDauXoa();
        //    return ds;
        //}
        //public static List<CHOADONDTO> LayDanhSachHoaDonChuaDanhDauXoa()
        //{
        //    List<CHOADONDTO> ds = new List<CHOADONDTO>();
        //    CHOADONDAO lndDao = new CHOADONDAO();
        //    ds = CHOADONDAO.LayDanhSachHoaDonChuaDanhDauXoa();
        //    return ds;
        //}
        //public static List<CHOADONDTO> LayDanhSachHoaDonThuocTiepTan(int MaTiepTan)
        //{
        //    List<CHOADONDTO> ds = new List<CHOADONDTO>();
        //    CHOADONDAO lndDao = new CHOADONDAO();
        //    ds = CHOADONDAO.LayDanhSachHoaDonThuocTiepTan(MaTiepTan);
        //    return ds;
        //}
        //public static DataTable LayBang()
        //{
        //    DataTable dt;         
        //    dt = CHOADONDAO.LayBang();
        //    return dt;
        //}
        //public static DataTable LayBangHoaDon()
        //{
        //    DataTable dt;
        //    dt = CHOADONDAO.LayBangHoaDon();
        //    return dt;
        //}
        //public static DataTable LayBangHoaDonDaDanhDauXoa()
        //{
        //    DataTable dt;
        //    dt = CHOADONDAO.LayBangHoaDonDaDanhDauXoa();
        //    return dt;
        //}
        //public static DataTable LayBangHoaDonChuaDanhDauXoa()
        //{
        //    DataTable dt;
        //    dt = CHOADONDAO.LayBangHoaDonChuaDanhDauXoa();
        //    return dt;
        //}
        //public static DataTable LayBangHoaDonThuocTiepTan(int MaTiepTan)
        //{
        //    DataTable dt;
        //    dt = CHOADONDAO.LayBangHoaDonThuocTiepTan(MaTiepTan);
        //    return dt;
        //}
        //public void ThemHoaDon(CHOADONDTO hoadonDto)
        //{
        //    CHOADONDAO hoadonDao = new CHOADONDAO();
        //    hoadonDao.ThemHoaDon(hoadonDto);
        //}

        //public static void XoaHoaDon(int MaHoaDon)
        //{
        //    CHOADONDAO.XoaHoaDon(MaHoaDon);
        //}

        //public static void CapNhatTinhTrangHoaDon(int MaHoaDon, bool TinhTrang)
        //{
        //    CHOADONDAO.CapNhatTinhTrangHoaDon(MaHoaDon, TinhTrang);
        //}
    //tiep tan 

        public static void ThongTinHoaDon(ref CPHIEUTHUEDTO phieuthueDto, ref int maPhong, string tenPhong, ref int soNgayThue, ref long donGia, ref long thanhTien)
        {
            maPhong = CPHONGDAO.LayMaPhongChuaThanhToan(tenPhong);
            soNgayThue = CHOADONBUS.SoNgayThue(maPhong);//so ngay thue 
            CPHONGDTO phongDto = CPHONGBUS.LayThongTinPhong(maPhong);
            CLOAIPHONGDTO loaiphong = CLOAIPHONGDAO.LayLoaiPhongDaDuyet(phongDto.MaLoaiPhong);
            donGia = loaiphong.DonGia;
            phieuthueDto= CPHIEUTHUEDAO.LayPhieuThueChuaThanhToan(maPhong);
            //khach nuoc ngoai            
            double hskhach = 1;//he so khach tung loai khach (trong nuoc la 1 )
            List<CKHACHTHUEDTO> khachthue = CKHACHTHUEBUS.LayDanhSachKhachThueTheoPhieuThue(phieuthueDto.MaPhieuThue);
            //đã sửa lại LayDanhSachLoaiKhachThue thành CLOAIKHACHTHUEDAO.LayDanhSachLoaiKhachThueDaDuyet()
            List<CLOAIKHACHTHUEDTO> loaikhachthue = CLOAIKHACHTHUEDAO.LayDanhSachLoaiKhachThueDaDuyet();
            foreach (CKHACHTHUEDTO kh in khachthue)
            {
                foreach (CLOAIKHACHTHUEDTO lkh in loaikhachthue)
                {
                    if (kh.MaLoaiKhachThue == lkh.MaLoaiKhachThue)
                    {
                        hskhach = (double)lkh.HeSoLoaiKhach;
                    }
                }
            }

            if (hskhach > 1)
            {
                donGia = (long)(donGia * hskhach);
            }
            else
            {
                int t = CKHACHTHUEDAO.SoLuongKhachThueTrongPhieuThue(phieuthueDto.MaPhieuThue);
                //he so loai khach
                List<CQUIDINHDTO> quidinh = CQUIDINHBUS.LayDanhSachQuiDinhDaDuyet();
                int hs = 0;//he so la 0%
                foreach (CQUIDINHDTO qd in quidinh)
                {
                    if (qd.MoTa == "Số lượng loại khách")
                    {
                        hs = (int)qd.HeSo;
                    }
                }

                if (t > hs)
                {
                    foreach (CQUIDINHDTO qd in quidinh)
                    {
                        if (qd.MoTa == "Tỷ lệ phụ thu")
                        {
                            donGia = donGia + (long)((long)(donGia * qd.HeSo) / 100);
                        }

                    }
                }

            }
            thanhTien = donGia * soNgayThue;//so tien thue 
            //int maloaiphong = phongDto.MaLoaiPhong;

        }
        //tiep tan 
        public static int KTNamNhuan(int Nam)
        {
            if (Nam % 100 != 0 && Nam % 4 == 0)
                return 1;
            if (Nam % 400 == 0)
                return 1;
            return 0;
        }
        public static int SoNgayTrongNam(DateTime Ngay)
        {
            int[] sn = new int[13] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if (KTNamNhuan(Ngay.Year) == 1)
            {
                sn[2] = 29;
            }
            int stt = 0;
            for (int i = 1; i < Ngay.Month; i++)
            {
                stt += sn[i];
            }
            return stt + Ngay.Day;

        }
        //public static int KhoangCachNam_SoNgay(DateTime Ngay)
        //{
        //    int s = 0;
        //    for (int i = 1; 1 < Ngay.Year; i++)
        //    {
        //        s += 365;
        //        if (KTNamNhuan(i) == 1)
        //            s += 1;
        //    }
        //    return (s + SoNgayTrongNam(Ngay));
        //}
        public static int KhoangCanhNgay(DateTime NgayBatDau, DateTime NgayKetThuc)
        {
            int km = 0;
            if (NgayKetThuc.Year > NgayBatDau.Year)
            {
                km = NgayKetThuc.Year - NgayBatDau.Year;
            }
            int sn = SoNgayTrongNam(NgayKetThuc) - SoNgayTrongNam(NgayBatDau);
            if (km == 0)
                return sn;
            return km * 365 + sn;


        }



        public static int SoNgayThue(int ma)
        {

            CPHIEUTHUEDTO phieuthue = CPHIEUTHUEDAO.LayThongTinPhieuThue(ma);
            DateTime dt = DateTime.Now;
            int songaythue = 0;
            songaythue = KhoangCanhNgay(phieuthue.NgayBatDau, dt);
            return songaythue;
        }
        //public static CHOADONDTO LayThongTinHoaDonTheoNgayKetThuc(string tenKhachThanhToan, DateTime ngayKetThuc)
        //{
        //    CHOADONDTO hoađonto = new CHOADONDTO();
        //    hoađonto= CHOADONDAO.LayThongTinHoaDonTheoNgayKetThuc(tenKhachThanhToan,ngayKetThuc);
        //    return hoađonto;
        //}
        public static void ThanhToanHoaDon(List<CPHONGDTO> dsPhongThanhToanHD, List<int> dsMaPhieuThueCapNhat, CHOADONDTO hoadonDto)
        {
            //cập nhật tình trạng phòng trống
            foreach (CPHONGDTO phongDto in dsPhongThanhToanHD)
            {
                CPHONGBUS.CapNhatTinhTrangPhongTrong_DangThue(phongDto.MaPhong, "Trống");
            }
            //Thêm hóa đơn         
            CHOADONDAO hoadonDao = new CHOADONDAO();
            hoadonDao.ThemHoaDon(hoadonDto);
            //Lấy thông tin hóa đơn để lấy được mã hóa đơn
            hoadonDto = CHOADONDAO.LayThongTinHoaDonTheoNgayKetThuc(hoadonDto.TenKhachThanhToan, hoadonDto.NgayKetThuc);
            //cập nhật lại mã hóa đơn cho các phiếu thuê được thanh toán
            foreach (int maPhieuThue in dsMaPhieuThueCapNhat)
            {
                CPHIEUTHUEDAO.CapNhatPhieuThueDaThanhToan(maPhieuThue, hoadonDto.MaHoaDon);
            }
        }
        public static DataTable TraCuuHoaDonTheoYeuCau(string tenKhachThanhToan, DateTime ngayLap, string tenTiepTan, string sapXep, string thuTu)
        {
            DataTable dt;
            dt = CHOADONDAO.TraCuuHoaDonTheoYeuCau(tenKhachThanhToan,ngayLap,tenTiepTan,sapXep,thuTu);
            return dt;
        }
    }
}
